package com.codinbros.session001.interfaces;

import java.awt.Point;

import com.codinbros.session001.model.ForceField;

import processing.core.PApplet;
import processing.core.PVector;

public interface Citizen {

	public PVector getVelocity();
	public void setVelocity(PVector velocity);
	
	public PVector getAccellectaion();
	public void setAccelleration(PVector acelleration);
	/**
	 * Send a vector that affects the citizen. The citizen will have to relate own behavior
	 * to that of the input
	 * @param force PVector
	 */
	public void affect(PVector force);
	/**
	 * Get the Effect this citizen has on its surroundings. 
	 * @return
	 */
	public ForceField getEffect();
	/**
	 * Get the current position of the citizen
	 * @return Point
	 */
	public PVector getPostition();
	
	/**
	 * Sets the current position of the citizen
	 * @param position Point
	 */
	public void setPosition(PVector position);

	/**
	 * Kills the citizen
	 */
	public void terminate();
	/**
	 * Pauses the citizen actions
	 */
	public void pause();
	/**
	 * If the citizen is paused, it resumes activity
	 */
	public void resume();
	/**
	 * on each frame this is called to make the citizen redraw itself.
	 */
	public void draw();
	/*
	 * onto what should the citizen be drawn
	 */
	public void setPapplet(PApplet pa);
	
	public void setMaxSpeed(float maxSpeed);
	
	public float getMaxSpeed();
	
	public void setMaxForce(float maxForce);
	
	public float getMaxForce();
}
